<template>
  <s-layout title="选择自提门店" :bgStyle="{ color: '#FFF' }">
    <view class="storeBox" ref="container">
      <view
        class="storeBox-box"
        v-for="(item, index) in state.storeList"
        :key="index"
        @tap="checked(item)"
      >
        <view class="store-img">
          <image :src="item.logo" class="img" />
        </view>
        <view class="store-cent-left">
          <view class="store-name">{{ item.name }}</view>
          <view class="store-address line1">
            {{ item.areaName }}{{ ', ' + item.detailAddress }}
          </view>
        </view>
        <view class="row-right ss-flex-col ss-col-center">
          <view>
            <!-- #ifdef H5 -->
            <a class="store-phone" :href="'tel:' + item.phone">
              <view class="iconfont">
                <view class="ss-rest-button">
                  <text class="_icon-forward" />
                </view>
              </view>
            </a>
            <!-- #endif -->
            <!-- #ifdef MP -->
            <view class="store-phone" @click="call(item.phone)">
              <view class="iconfont">
                <view class="ss-rest-button">
                  <text class="_icon-forward" />
                </view>
              </view>
            </view>
            <!-- #endif -->
          </view>
          <view class="store-distance ss-flex ss-row-center" @tap.stop="showMaoLocation(item)">
            <text class="addressTxt" v-if="item.distance">
              距离{{ item.distance.toFixed(2) }}千米
            </text>
            <text class="addressTxt" v-else>查看地图</text>
            <view class="iconfont">
              <view class="ss-rest-button">
                <text class="_icon-forward" />
              </view>
            </view>
          </view>
        </view>
      </view>
    </view>
  </s-layout>
</template>

<script setup>
  import DeliveryApi from '@/sheep/api/trade/delivery';
  import { onMounted, reactive } from 'vue';
  import { onLoad } from '@dcloudio/uni-app';
  import sheep from '@/sheep';

  const LONGITUDE = 'user_longitude';
  const LATITUDE = 'user_latitude';
  const state = reactive({
    loaded: false,
    loading: false,
    storeList: [],
    system_store: {},
    locationShow: false,
    user_latitude: 0,
    user_longitude: 0,
  });

  const call = (phone) => {
    uni.makePhoneCall({
      phoneNumber: phone,
    });
  };
  const selfLocation = () => {
    // #ifdef H5
    const jsWxSdk = sheep.$platform.useProvider('wechat').jsWxSdk;
    if (jsWxSdk.isWechat()) {
      jsWxSdk.getLocation((res) => {
        state.user_latitude = res.latitude;
        state.user_longitude = res.longitude;
        uni.setStorageSync(LATITUDE, res.latitude);
        uni.setStorageSync(LONGITUDE, res.longitude);
        getList();
      });
    } else {
      // #endif
      uni.getLocation({
        type: 'gcj02',
        success: (res) => {
          try {
            state.user_latitude = res.latitude;
            state.user_longitude = res.longitude;
            uni.setStorageSync(LATITUDE, res.latitude);
            uni.setStorageSync(LONGITUDE, res.longitude);
          } catch (e) {
            console.error(e);
          }
          getList();
        },
        complete: () => {
          getList();
        },
      });
      // #ifdef H5
    }
    // #endif
  };
  const showMaoLocation = (e) => {
    // #ifdef H5
    const jsWxSdk = sheep.$platform.useProvider('wechat').jsWxSdk;
    if (jsWxSdk.isWechat()) {
      jsWxSdk.openLocation({
        latitude: Number(e.latitude),
        longitude: Number(e.longitude),
        name: e.name,
        address: `${e.areaName}-${e.detailAddress}`,
      });
    } else {
      // #endif
      uni.openLocation({
        latitude: Number(e.latitude),
        longitude: Number(e.longitude),
        name: e.name,
        address: `${e.areaName}-${e.detailAddress}`,
        success: function () {
          console.log('success');
        },
      });
      // #ifdef H5
    }
    // #endif
  };

  /**
   * 选中门店
   */
  const checked = (addressInfo) => {
    uni.$emit('SELECT_PICK_UP_INFO', {
      addressInfo,
    });
    sheep.$router.back();
  };

  /**
   * 获取门店列表数据
   */
  const getList = async () => {
    if (state.loading || state.loaded) {
      return;
    }
    state.loading = true;
    const { data, code } = await DeliveryApi.getDeliveryPickUpStoreList({
      latitude: state.user_latitude,
      longitude: state.user_longitude,
    });
    if (code !== 0) {
      return;
    }
    state.loading = false;
    state.storeList = data;
  };

  onMounted(() => {
    if (state.user_latitude && state.user_longitude) {
      getList();
    } else {
      selfLocation();
      getList();
    }
  });
  onLoad(() => {
    try {
      state.user_latitude = uni.getStorageSync(LATITUDE);
      state.user_longitude = uni.getStorageSync(LONGITUDE);
    } catch (e) {
      console.error(e);
    }
  });
</script>
<style lang="scss" scoped>
  .line1 {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .geoPage {
    position: fixed;
    width: 100%;
    height: 100%;
    top: 0;
    z-index: 10000;
  }

  .storeBox {
    width: 100%;
    background-color: #fff;
    padding: 0 30rpx;
  }

  .storeBox-box {
    width: 100%;
    height: auto;
    display: flex;
    align-items: center;
    padding: 23rpx 0;
    justify-content: space-between;
    border-bottom: 1px solid #eee;
  }

  .store-cent {
    display: flex;
    align-items: center;
    width: 80%;
  }

  .store-cent-left {
    //width: 45%;
    flex: 2;
  }

  .store-img {
    flex: 1;
    width: 120rpx;
    height: 120rpx;
    border-radius: 6rpx;
    margin-right: 22rpx;
  }

  .store-img .img {
    width: 100%;
    height: 100%;
  }

  .store-name {
    color: #282828;
    font-size: 30rpx;
    margin-bottom: 22rpx;
    font-weight: 800;
  }

  .store-address {
    color: #666666;
    font-size: 24rpx;
  }

  .store-phone {
    width: 50rpx;
    height: 50rpx;
    color: #fff;
    border-radius: 50%;
    display: block;
    text-align: center;
    line-height: 48rpx;
    background-color: #e83323;
    margin-bottom: 22rpx;
    text-decoration: none;
  }

  .store-distance {
    font-size: 22rpx;
    color: #e83323;
  }

  .iconfont {
    font-size: 20rpx;
  }

  .row-right {
    flex: 2;
    //display: flex;
    //flex-direction: column;
    //align-items: flex-end;
    //width: 33.5%;
  }
</style>
